package com.zhanhong.opencvdemo.config;


/**
 * 答题卡扫描自定义配置
 */
public class AnswerSheetConfig {

    //*******************************答题卡参数配置区域*******************************//
    //答题区域宽度
    private static final float TARGET_AREA_WIDTH = 1560F;
    //答题区域高度
    private static final float TARGET_AREA_HEIGHT = 1686F;
    //左边距
    private static final float OFFSET_LEFT = 60F;
    //右边距
    private static final float OFFSET_RIGHT = 62F;
    //上边距
    private static final float OFFSET_TOP = 77.5F;
    //下边距
    private static final float OFFSET_BOTTOM = 50.5F;
    //每栏中间分隔距离
    private static final float EMPTY_COL_WIDTH = 60F;
    //每大行中间分隔距离
    private static final float EMPTY_ROW_HEIGHT = 69F;
    //每栏题数
    public static final int PER_COL_COUNT = 5;
    //每大行选项数
    public static final int PER_ROW_COUNT = 4;
    //总列数
    public static final int TOTAL_COL_COUNT = 20;
    //总行数
    public static final int TOTAL_ROW_COUNT = 28;
    //定位点在目标图像（R.mipmap.answer_sheet_target）中的比例
    public static final float TARGET_CIRCLE_RATE = 0.6F;
    //定位点在答题卡照片中，宽度方向上近似占比
    public static final float CIRCLE_RADIUS_RATE = 0.028F;

    //*******************************答题卡参数配置区域*******************************//


    //*******************************检测参数配置区域*******************************//
    //可接受的最大偏差因子：二值化后的图像中，只要该选项的测量区域均值小于所有选项的测量区域均值的最大值的（LIMIT_ACCEPT_MAX_FACTOR*100）%，即认为该选项未被选中
    public static final float LIMIT_ACCEPT_MAX_FACTOR = 0.40F;
    //可接受的最小偏差因子：二值化后的图像中，只要所有选项的测量区域均值的最大值与均值的最小值相差小于255 * LIMIT_ACCEPT_MIN_FACTOR，即认为该最大值无效（用户没有涂答题卡，或把答题卡所有题的所有选项都涂满）
    public static final float LIMIT_ACCEPT_MIN_FACTOR = 0.25F;
    //如果该选项的值占四个选项总和的LIMIT_ACCEPT_TOTAL_PERCENT_FACTOR以上，就认为被选中
    public static final float LIMIT_ACCEPT_TOTAL_PERCENT_FACTOR = 0.40F;
    //如果某个题目四个选项都没有被选中，则进行重新处理，判断是否做过这题，必须满足条件该题四个选项中的最大值大于所有选项中最大值的LIMIT_RECHECK_MIN_FACTOR
    public static final float LIMIT_RECHECK_MIN_FACTOR = 0.15F;
    //每个选项测量的中间收缩因子：每个选项区域的四条边都向内部收缩（OPTION_SHRINK_FACTOR*100）%而形成的新区域作为被测量区域
    public static final float OPTION_SHRINK_FACTOR = 0.10F;
    //*******************************检测参数配置区域*******************************//


    //*******************************自动计算区域*******************************//
    //答题卡总题数
    public static final int QUESTION_TOTAL_COUNT = TOTAL_ROW_COUNT / PER_ROW_COUNT * TOTAL_COL_COUNT;
    //答题卡区域宽高比
    public static final float TARGET_AREA_WIDTH_AND_HEIGHT_RATE = TARGET_AREA_WIDTH / TARGET_AREA_HEIGHT;
    //左边距比例
    public static final float OFFSET_LEFT_FACTOR_BY_WIDTH = OFFSET_LEFT / TARGET_AREA_WIDTH;
    //右边距比例
    public static final float OFFSET_RIGHT_FACTOR_BY_WIDTH = OFFSET_RIGHT / TARGET_AREA_WIDTH;
    //上边距比例
    public static final float OFFSET_TOP_FACTOR_BY_HEIGHT = OFFSET_TOP / TARGET_AREA_HEIGHT;
    //下边距比例
    public static final float OFFSET_BOTTOM_FACTOR_BY_HEIGHT = OFFSET_BOTTOM / TARGET_AREA_HEIGHT;
    //每栏中间分隔距离比例
    public static final float EMPTY_COL_WIDTH_FACTOR_BY_WIDTH = EMPTY_COL_WIDTH / TARGET_AREA_WIDTH;
    //每大行中间分隔距离比例
    public static final float EMPTY_ROW_HEIGHT_FACTOR_BY_HEIGHT = EMPTY_ROW_HEIGHT / TARGET_AREA_HEIGHT;
    //*******************************自动计算区域*******************************//

}
